;(() => {
  // 类 类型: 类的类型,类的类型可以通过接口来实现
  // 定义一个接口
  interface IFiy {
    // 该方法没有任何的实现(方法中什么都没有)
    fly()
  }
  // 定义一个类,这个类的类型就是上面定义的接口
  class Person implements IFiy {
    fly() {
      console.log('哈哈哈哈')
    }
  }
  const person = new Person()
  person.fly()
  // 定义一个接口
  interface ISwim {
    swim()
  }
  class Person2 implements IFiy, ISwim {
    fly() {
      console.log('呵呵')
    }
    swim() {
      console.log('嘿嘿')
    }
  }
  const person2 = new Person2()
  person2.fly()
  person2.swim()
  // 总结: 类可以通过接口的方式,来定义当前这个类的类型
  // 类可以实现一个接口,类也可以实现多个接口,要注意,接口中的内容都要真正的实现

  // 定义了一个接口，继承其他的多个接口
  interface MyIFly extends ISwim, IFiy {}
  // 定义一个类

  class Person3 implements MyIFly {
    swim() {
      console.log(2222)
    }
    fly() {
      console.log(3333)
    }
  }
  const person3 = new Person3()
  person3.swim()

  // 总结:接口和接口之间叫继承(使用的是extends关键字),类和接口之间叫实现(使用的是implements)
})()
